﻿/*
 Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
*/
(function(a) {
    CKEDITOR.config.jqueryOverrideVal = "undefined" == typeof CKEDITOR.config.jqueryOverrideVal ? !0 : CKEDITOR.config.jqueryOverrideVal;
    "undefined" != typeof a && (a.extend(a.fn, {
        ckeditorGet: function() {
            var a = this.eq(0).data("ckeditorInstance");
            if (!a) throw "CKEditor is not initialized yet, use ckeditor() with a callback.";
            return a
        },
        ckeditor: function(g, d) {
            if (!CKEDITOR.env.isCompatible) throw Error("The environment is incompatible.");
            if (!a.isFunction(g)) var k = d,
            d = g,
            g = k;
            var i = [],
            d = d || {};
            this.each(function() {
                var b = a(this),
                c = b.data("ckeditorInstance"),
                f = b.data("_ckeditorInstanceLock"),
                h = this,
                j = new a.Deferred;
                i.push(j.promise());
                if (c && !f) g && g.apply(c, [this]),
                j.resolve();
                else if (f) c.once("instanceReady",
                function() {
                    setTimeout(function() {
                        c.element ? (c.element.$ == h && g && g.apply(c, [h]), j.resolve()) : setTimeout(arguments.callee, 100)
                    },
                    0)
                },
                null, null, 9999);
                else {
                    if (d.autoUpdateElement || "undefined" == typeof d.autoUpdateElement && CKEDITOR.config.autoUpdateElement) d.autoUpdateElementJquery = !0;
                    d.autoUpdateElement = !1;
                    b.data("_ckeditorInstanceLock", !0);
                    c = a(this).is("textarea") ? CKEDITOR.replace(h, d) : CKEDITOR.inline(h, d);
                    b.data("ckeditorInstance", c);
                    c.on("instanceReady",
                    function(d) {
                        var e = d.editor;
                        setTimeout(function() {
                            if (e.element) {
                                d.removeListener();
                                e.on("dataReady",
                                function() {
                                    b.trigger("dataReady.ckeditor", [e])
                                });
                                e.on("setData",
                                function(a) {
                                    b.trigger("setData.ckeditor", [e, a.data])
                                });
                                e.on("getData",
                                function(a) {
                                    b.trigger("getData.ckeditor", [e, a.data])
                                },
                                999);
                                e.on("destroy",
                                function() {
                                    b.trigger("destroy.ckeditor", [e])
                                });
                                e.on("save",
                                function() {
                                    a(h.form).submit();
                                    return ! 1
                                },
                                null, null, 20);
                                if (e.config.autoUpdateElementJquery && b.is("textarea") && a(h.form).length) {
                                    var c = function() {
                                        b.ckeditor(function() {
                                            e.updateElement()
                                        })
                                    };
                                    a(h.form).submit(c);
                                    a(h.form).bind("form-pre-serialize", c);
                                    b.bind("destroy.ckeditor",
                                    function() {
                                        a(h.form).unbind("submit", c);
                                        a(h.form).unbind("form-pre-serialize", c)
                                    })
                                }
                                e.on("destroy",
                                function() {
                                    b.removeData("ckeditorInstance")
                                });
                                b.removeData("_ckeditorInstanceLock");
                                b.trigger("instanceReady.ckeditor", [e]);
                                g && g.apply(e, [h]);
                                j.resolve()
                            } else setTimeout(arguments.callee, 100)
                        },
                        0)
                    },
                    null, null, 9999)
                }
            });
            var f = new a.Deferred;
            this.promise = f.promise();
            a.when.apply(this, i).then(function() {
                f.resolve()
            });
            this.editor = this.eq(0).data("ckeditorInstance");
            return this
        }
    }), CKEDITOR.config.jqueryOverrideVal && (a.fn.val = CKEDITOR.tools.override(a.fn.val,
    function(g) {
        return function(d) {
            if (arguments.length) {
                var k = this,
                i = [],
                f = this.each(function() {
                    var b = a(this),
                    c = b.data("ckeditorInstance");
                    if (b.is("textarea") && c) {
                        var f = new a.Deferred;
                        c.setData(d,
                        function() {
                            f.resolve()
                        });
                        i.push(f.promise());
                        return ! 0
                    }
                    return g.call(b, d)
                });
                if (i.length) {
                    var b = new a.Deferred;
                    a.when.apply(this, i).done(function() {
                        b.resolveWith(k)
                    });
                    return b.promise()
                }
                return f
            }
            var f = a(this).eq(0),
            c = f.data("ckeditorInstance");
            return f.is("textarea") && c ? c.getData() : g.call(f)
        }
    })))
})(window.jQuery);